이제 스프링의 트랜잭션 서비스 추상화 기법을 이용해 다양한 트랜잭션 기술을 일관된 방식으로 제어할 수 있게 됐다.

수직, 수평 계층구조와 의존관계

수평 : 애플리케이션 로직의 종류에 따른 구분
수직 : 로직과 기술 (기술 서비스와 환경에서 독립시켜줌)

모두 결합도가 낮으며, 서로 영향을 주지 않고 자유롭게 확장될 수 있는 구조를 만들 수 있는 데는 스프링의 DI가 중요한 역할을 하고 있다.
DI > 관심, 책임, 성격이 다른 코드를 깔끔하게 분리하는 것.

단일 책임 원칙

  • 하나의 모듈은 한 가지 책임을 가져야 한다.

UserService어떻게 사용자 레벨을 관리할 것인가어떻게 트랜잭션을 관리할 것인가라는 두 가지 책임을 갖고 있었다. 이는 단일 책임 원칙을 지키지 못하는 것이다. 하지만 트랜잭션 서비스의 추상화 방식을 도입하고 나서는 사용자 관리 로직이 바뀌거나 추가되지 않는 한 UserService의 코드에는 손댈 이유가 없다.

단일 책임 원칙의 장점

어떤 변경이 필요할 때 수정 대상이 명확해진다.
어플리케이션 계층의 코드가 특정 기술에 종속돼서 기술이 바뀔 때마다 코드의 수정이 필요하면 엄청난 코드를 수정해야 할 것이다. 그러므로 책임과 관심이 다른 코드를 분리하고, 서로 영향을 주지 않도록 다양한 추상화 기법을 도입하고, 애플리케이션 로직과 기술/환경을 분리하는 등의 작업은 복잡해지는 엔터프라이즈 애플리케이션에는 반드시 필요하다. 그리고 이를 위한 핵심적인 도구가 바로 스프링이 제공하는 DI다.

스프링의 의존관계 주입 기술인 DI는 모든 스프링 기술의 기반이 되는 핵심 엔진이자 원리이며, 스프링이 지지하고 지원하는, 좋은 설계와 코드를 만드는 모든 과정에서 사용되는 가장 중요한 도구이다.